from flask_restplus import Namespace, Resource
from flask import request
from app.models import User,Blog,Comment
from app.apis.auth import auth
from app.extensions import db
from app.extensions import cache


api = Namespace('user', description='用户信息')
# doc：添加接口文档信息
@api.route('/<int:uid>/')
class UserAPI(Resource):
    # 设置当前所有接口收到保护
    method_decorators = [auth.login_required]
    # 获取指定用户的信息  功能是将要求用户的信息返回
    def get(self, uid):
        # 查询到当前用户的所有信息
        try:
            user = User.query.get(uid)
            blog_dict = []
            comment = []
            # 显示当前用户的所写的博客
            blog_list = Blog.query.filter(Blog.blog_user_id==uid).all()
            for blog in blog_list:
                # 查询  评论当前用户的评论
                comment_list = Comment.query.filter(Comment.blog_id == blog.id).all()
                for c in comment_list:
                    # 获取每一个评论信息
                    comment.append({'所属用户':c.comment_user_id,
                                    '评论内容':c.content})
                #     将评论信息追加到 博客信息的后面
                blog_dict.extend([{'博客id':blog.id,'博客题目':blog.title,
                                  '博客创建时间':str(blog.create_time)},
                                 {'评论':comment}])
                # 将当前用户评论的列表情况  等待下一个评论进行填充
                comment = []



            # 返回 每一个博客的信息和属于他的评论信息
            return {'用户id': user.id, '用户名': user.user_name,'我的博客':{'blog':blog_dict}}
        except Exception as e:
            return '没有这个用户'


    def put(self, uid):
        # 找到对应的用户信息
        # 通过主键 查找用户
        user = User.query.get(uid)
        # 获取新密码
        new_password = request.json.get('password')
        # 获取新用户名
        new_name = request.json.get('username')
        # 修改属性
        if new_name:
            if new_name != user.user_name:
                user.user_name = new_name
                db.session.add(user)
                n = '用户名已更改，'
            else:
                n = '新的用户名与原用户名一样，'
        else:
            n = '用户名未修改，'
        if new_password:
            if new_password != user.user_password:
                user.user_password = new_password
                db.session.add(user)
                return n + '密码已更改'
            return n + '新的密码与原密码一样'
        return n + '密码未修改'

    def delete(self, uid):
        cache.set(request.headers['Authorization'][6:], "", timeout=3600)
        return '退出成功'


@api.route('/')
class UserListAPI(Resource):
    # 注册用户
    def post(self):
        # 获取输入的账号和密码
        new_user_name = request.json.get('username')
        new_pass_word = request.json.get('password')
        # 根据注册的用户名 在数据库中进行查找
        users = User.query.filter(User.user_name == new_user_name).first()
        # 如果用户名不存在 才可以进行后续操作
        if not users:
            # 进行密码的判断
            if len(new_pass_word) > 6:
                new_user = User(user_name=new_user_name, user_password=new_pass_word)
                db.session.add(new_user)
                return '注册成功'
            return '密码太简单'
        return '用户名已存在'

